package br.com.venda;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;


import br.com.exception.DadosInvalidosException;
import br.com.exception.ItemRepitidoException;
import br.com.exception.SemItemEstoqueException;
import br.com.exception.Validacoes;
import br.com.item.Item;
import br.com.item.ItemFaixada;
import br.com.negocio.VendaService;
import br.com.pessoa.Pessoa;


public class VendaFaixada {
	
	public Venda criarVenda(String situacao, Pessoa funcionario, Pessoa cliente,List<ItemVenda> itensVenda) throws DadosInvalidosException{
		
		if(!Validacoes.verificaString(situacao)){
			throw new DadosInvalidosException();
		}
			
			Venda venda = new Venda();
			venda.setHora(getTime());
			venda.setData(getDate());
			venda.setTotal(new VendaFaixada().calcularTotal(itensVenda));
			venda.setSituacao(situacao);
			venda.setCliente(cliente);
			venda.setFuncionario(funcionario);
			venda.setItensVenda(itensVenda);
			
		return venda;
	}
	
	
	public void verificarItemQuantidade(Item item,int quantidade) throws SemItemEstoqueException{
		
		if (item.getQtdEstoque() < quantidade){
			throw new SemItemEstoqueException();
		}
	}
	
	public void itemRepitido(ArrayList<ItemVenda> itensVenda, Item item) throws ItemRepitidoException{
		for(ItemVenda iv : itensVenda ){
			if(iv.getItem().getCodigo() == item.getCodigo()){
				throw new ItemRepitidoException();
			}
		}
	}
	
	
    private String getDate() {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();
        return dateFormat.format(date);
    }
    
    private String getTime(){
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        Date date = new Date();
        return dateFormat.format(date);
    }

	
	
	public Double calcularTotal(List<ItemVenda> itensVenda){
		Double total = 0.0;
		
		for(ItemVenda i: itensVenda){
			total += i.getSubTotal();
		}
		
		return total;
	}
	
	
	public void incluirVenda(Venda venda){
		new VendaService().salvarVenda(venda);
		atualizarItem(venda);
	}
	
	public void atualizarItem(Venda venda){
		
		for(ItemVenda itemVenda: venda.getItensVenda()){
			
			int qtdeNova =  itemVenda.getItem().getQtdEstoque() - itemVenda.getQuantidade();
			itemVenda.getItem().setQtdEstoque(qtdeNova);
			new ItemFaixada().adicionarItem(itemVenda.getItem());
		}
		
	}
	
}
